#
#    Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#    In addition, as a special exception, the copyright holders give
#    permission to link the code of portions of this program with the
#    OpenSSL library under certain conditions as described in each
#    individual source file, and distribute linked combinations
#    including the two.
#
#    You must obey the GNU General Public License in all respects
#    for all of the code used other than OpenSSL.  If you modify
#    file(s) with this exception, you may extend this exception to your
#    version of the file(s), but you are not obligated to do so.  If you
#    do not wish to do so, delete this exception statement from your
#    version.  If you delete this exception statement from all source
#    files in the program, then also delete it here.
#

from waflib import TaskGen

def build(bld):
    source = """
             asset.cc
             asset_factory.cc
             asset_writer.cc
             atmos_asset.cc
             atmos_asset_writer.cc
             bitstream.cc
             certificate_chain.cc
             certificate.cc
             chromaticity.cc
             colour_conversion.cc
             cpl.cc
             data.cc
             dcp.cc
             dcp_time.cc
             decrypted_kdm.cc
             decrypted_kdm_key.cc
             encrypted_kdm.cc
             exceptions.cc
             file.cc
             font_asset.cc
             fsk.cc
             gamma_transfer_function.cc
             identity_transfer_function.cc
             interop_load_font_node.cc
             interop_subtitle_asset.cc
             j2k.cc
             key.cc
             local_time.cc
             locale_convert.cc
             metadata.cc
             modified_gamma_transfer_function.cc
             mono_picture_asset.cc
             mono_picture_asset_writer.cc
             mono_picture_frame.cc
             mxf.cc
             name_format.cc
             object.cc
             openjpeg_image.cc
             picture_asset.cc
             picture_asset_writer.cc
             pkl.cc
             raw_convert.cc
             reel.cc
             reel_asset.cc
             reel_atmos_asset.cc
             reel_closed_caption_asset.cc
             reel_mono_picture_asset.cc
             reel_mxf.cc
             reel_picture_asset.cc
             reel_markers_asset.cc
             reel_sound_asset.cc
             reel_stereo_picture_asset.cc
             reel_subtitle_asset.cc
             ref.cc
             rgb_xyz.cc
             s_gamut3_transfer_function.cc
             smpte_load_font_node.cc
             smpte_subtitle_asset.cc
             sound_asset.cc
             sound_asset_writer.cc
             sound_frame.cc
             stereo_picture_asset.cc
             stereo_picture_asset_writer.cc
             stereo_picture_frame.cc
             subtitle.cc
             subtitle_asset.cc
             subtitle_asset_internal.cc
             subtitle_image.cc
             subtitle_string.cc
             transfer_function.cc
             types.cc
             util.cc
             verify.cc
             version.cc
             """

    headers = """
              asset.h
              asset_reader.h
              asset_writer.h
              atmos_asset.h
              atmos_asset_reader.h
              atmos_asset_writer.h
              atmos_frame.h
              certificate_chain.h
              certificate.h
              chromaticity.h
              colour_conversion.h
              cpl.h
              crypto_context.h
              dcp.h
              dcp_assert.h
              dcp_time.h
              data.h
              decrypted_kdm.h
              decrypted_kdm_key.h
              encrypted_kdm.h
              exceptions.h
              font_asset.h
              frame.h
              fsk.h
              gamma_transfer_function.h
              identity_transfer_function.h
              interop_load_font_node.h
              interop_subtitle_asset.h
              j2k.h
              key.h
              load_font_node.h
              local_time.h
              locale_convert.h
              metadata.h
              mono_picture_asset.h
              mono_picture_asset_reader.h
              mono_picture_frame.h
              modified_gamma_transfer_function.h
              mxf.h
              name_format.h
              object.h
              openjpeg_image.h
              picture_asset.h
              picture_asset_writer.h
              pkl.h
              raw_convert.h
              rgb_xyz.h
              reel.h
              reel_asset.h
              reel_atmos_asset.h
              reel_closed_caption_asset.h
              reel_markers_asset.h
              reel_mono_picture_asset.h
              reel_mxf.h
              reel_picture_asset.h
              reel_sound_asset.h
              reel_stereo_picture_asset.h
              reel_subtitle_asset.h
              ref.h
              s_gamut3_transfer_function.h
              smpte_load_font_node.h
              smpte_subtitle_asset.h
              sound_frame.h
              sound_asset.h
              sound_asset_reader.h
              sound_asset_writer.h
              stereo_picture_asset.h
              stereo_picture_asset_reader.h
              stereo_picture_asset_writer.h
              stereo_picture_frame.h
              subtitle.h
              subtitle_asset.h
              subtitle_image.h
              subtitle_string.h
              transfer_function.h
              types.h
              util.h
              verify.h
              version.h
              """

    # Main library
    if bld.env.STATIC:
        obj = bld(features='cxx cxxstlib')
    else:
        obj = bld(features='cxx cxxshlib')
    obj.name = 'libdcp%s' % bld.env.API_VERSION
    obj.target = 'dcp%s' % bld.env.API_VERSION
    obj.export_includes = ['.']
    obj.uselib = 'BOOST_FILESYSTEM BOOST_SIGNALS2 BOOST_DATETIME OPENSSL SIGC++ LIBXML++ OPENJPEG CXML XMLSEC1 ASDCPLIB_CTH XERCES'
    obj.source = source

    # Library for gcov
    if bld.is_defined('HAVE_GCOV'):
        if bld.env.STATIC:
            obj = bld(features='cxx cxxstlib')
        else:
            obj = bld(features='cxx cxxshlib')
        obj.name = 'libdcp%s_gcov' % bld.env.API_VERSION
        obj.target = 'dcp%s_gcov' % bld.env.API_VERSION
        obj.export_includes = ['.']
        obj.uselib = 'BOOST_FILESYSTEM BOOST_SIGNALS2 BOOST_DATETIME OPENSSL SIGC++ LIBXML++ OPENJPEG CXML XMLSEC1 ASDCPLIB_CTH XERCES'
        obj.use = 'libkumu-libdcp%s libasdcp-libdcp%s' % (bld.env.API_VERSION, bld.env.API_VERSION)
        obj.source = source
        obj.cppflags = ['-fprofile-arcs', '-ftest-coverage', '-fno-inline', '-fno-default-inline', '-fno-elide-constructors', '-g', '-O0']

    bld.install_files('${PREFIX}/include/libdcp%s/dcp' % bld.env.API_VERSION, headers)
    if bld.env.STATIC:
        bld.install_files('${PREFIX}/lib', 'libdcp%s.a' % bld.env.API_VERSION)
